home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / byteibm.arc / WILTON.ARC / CSLS2.ASM < prev    next >
Encoding:
Assembly Source File  |  1985-07-12  |  8.4 KB  |  205 lines

  1.             title    '128-character table for CGA'
  2.             name    csls2
  3.             page    55,132
  4.  
  5. ;
  6. ; RAM-Loadable Character Sets for the IBM PC
  7. ; Listing 2
  8. ;
  9. ; Richard Wilton
  10. ; July 1986
  11. ;
  12.  
  13. ; Notes:
  14. ;    This program loads a 128-character definition table for use in APA
  15. ;    graphics modes.  The program first selects an APA graphics mode.
  16. ;    Then the BIOS pointers to the character set table are updated.
  17. ;
  18. ;    Use on IBM Color Graphics Adapter ONLY.
  19.  
  20.  
  21. cseg    segment para public 'CODE'
  22.  
  23.     assume    cs:cseg,ds:cseg
  24.  
  25.     org    100h            ; initial program counter for .COM file
  26.  
  27. label0:
  28.     jmp    label1            ; jump around character set table
  29.     even
  30.  
  31. ; definitions for 8 by 8 characters 80h through FFh
  32. csdefs    db    087h,033h,03Fh,033h,087h,0E7h,0F3h,087h        ; 080h
  33.     db    0FFh,099h,0FFh,099h,099h,099h,0C0h,0FFh        ; 081h
  34.     db    0F1h,0FFh,0C3h,099h,081h,09Fh,0C3h,0FFh        ; 082h
  35.     db    081h,03Ch,0C3h,0F9h,0C1h,099h,0C0h,0FFh        ; 083h
  36.     db    099h,0FFh,0C3h,0F9h,0C1h,099h,0C0h,0FFh        ; 084h
  37.     db    08Fh,0FFh,0C3h,0F9h,0C1h,099h,0C0h,0FFh        ; 085h
  38.     db    0E7h,0E7h,0C3h,0F9h,0C1h,099h,0C0h,0FFh        ; 086h
  39.     db    0FFh,0FFh,0C3h,09Fh,09Fh,0C3h,0F9h,0E3h        ; 087h
  40.     db    081h,03Ch,0C3h,099h,081h,09Fh,0C3h,0FFh        ; 088h
  41.     db    099h,0FFh,0C3h,099h,081h,09Fh,0C3h,0FFh        ; 089h
  42.     db    08Fh,0FFh,0C3h,099h,081h,09Fh,0C3h,0FFh        ; 08Ah
  43.     db    099h,0FFh,0C7h,0E7h,0E7h,0E7h,0C3h,0FFh        ; 08Bh
  44.     db    083h,039h,0C7h,0E7h,0E7h,0E7h,0C3h,0FFh        ; 08Ch
  45.     db    08Fh,0FFh,0C7h,0E7h,0E7h,0E7h,0C3h,0FFh        ; 08Dh
  46.     db    09Ch,0E3h,0C9h,09Ch,080h,09Ch,09Ch,0FFh        ; 08Eh
  47.     db    0E7h,0E7h,0FFh,0C3h,099h,081h,099h,0FFh        ; 08Fh
  48.     db    0F1h,0FFh,081h,0CFh,0C3h,0CFh,081h,0FFh        ; 090h
  49.     db    0FFh,0FFh,080h,0F3h,080h,033h,080h,0FFh        ; 091h
  50.     db    0E0h,0C9h,099h,080h,099h,099h,098h,0FFh        ; 092h
  51.     db    0C3h,099h,0FFh,0C3h,099h,099h,0C3h,0FFh        ; 093h
  52.     db    0FFh,099h,0FFh,0C3h,099h,099h,0C3h,0FFh        ; 094h
  53.     db    0FFh,08Fh,0FFh,0C3h,099h,099h,0C3h,0FFh        ; 095h
  54.     db    0C3h,099h,0FFh,099h,099h,099h,0C0h,0FFh        ; 096h
  55.     db    0FFh,08Fh,0FFh,099h,099h,099h,0C0h,0FFh        ; 097h
  56.     db    0FFh,099h,0FFh,099h,099h,0C1h,0F9h,083h        ; 098h
  57.     db    03Ch,0E7h,0C3h,099h,099h,0C3h,0E7h,0FFh        ; 099h
  58.     db    099h,0FFh,099h,099h,099h,099h,0C3h,0FFh        ; 09Ah
  59.     db    0E7h,0E7h,081h,03Fh,03Fh,081h,0E7h,0E7h        ; 09Bh
  60.     db    0E3h,0C9h,0CDh,087h,0CFh,08Ch,081h,0FFh        ; 09Ch
  61.     db    099h,099h,0C3h,081h,0E7h,081h,0E7h,0E7h        ; 09Dh
  62.     db    007h,033h,033h,005h,039h,030h,039h,038h        ; 09Eh
  63.     db    0F1h,0E4h,0E7h,0C3h,0E7h,0E7h,027h,08Fh        ; 09Fh
  64.     db    0F1h,0FFh,0C3h,0F9h,0C1h,099h,0C0h,0FFh        ; 0A0h
  65.     db    0E3h,0FFh,0C7h,0E7h,0E7h,0E7h,0C3h,0FFh        ; 0A1h
  66.     db    0FFh,0F1h,0FFh,0C3h,099h,099h,0C3h,0FFh        ; 0A2h
  67.     db    0FFh,0F1h,0FFh,099h,099h,099h,0C0h,0FFh        ; 0A3h
  68.     db    0FFh,083h,0FFh,083h,099h,099h,099h,0FFh        ; 0A4h
  69.     db    081h,0FFh,099h,089h,081h,091h,099h,0FFh        ; 0A5h
  70.     db    0C3h,093h,093h,0C1h,0FFh,081h,0FFh,0FFh        ; 0A6h
  71.     db    0C7h,093h,093h,0C7h,0FFh,083h,0FFh,0FFh        ; 0A7h
  72.     db    0E7h,0FFh,0E7h,0CFh,09Fh,099h,0C3h,0FFh        ; 0A8h
  73.     db    0FFh,0FFh,0FFh,081h,09Fh,09Fh,0FFh,0FFh        ; 0A9h
  74.     db    0FFh,0FFh,0FFh,081h,0F9h,0F9h,0FFh,0FFh        ; 0AAh
  75.     db    03Ch,039h,033h,021h,0CCh,099h,033h,0F0h        ; 0ABh
  76.     db    03Ch,039h,033h,024h,0C8h,090h,030h,0FCh        ; 0ACh
  77.     db    0E7h,0E7h,0FFh,0E7h,0E7h,0E7h,0E7h,0FFh        ; 0ADh
  78.     db    0FFh,0CCh,099h,033h,099h,0CCh,0FFh,0FFh        ; 0AEh
  79.     db    0FFh,033h,099h,0CCh,099h,033h,0FFh,0FFh        ; 0AFh
  80.     db    0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h        ; 0B0h
  81.     db    0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h        ; 0B1h
  82.     db    024h,088h,024h,011h,024h,088h,024h,011h        ; 0B2h
  83.     db    0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h        ; 0B3h
  84.     db    0E7h,0E7h,0E7h,0E7h,007h,0E7h,0E7h,0E7h        ; 0B4h
  85.     db    0E7h,0E7h,007h,0E7h,007h,0E7h,0E7h,0E7h        ; 0B5h
  86.     db    0C9h,0C9h,0C9h,0C9h,009h,0C9h,0C9h,0C9h        ; 0B6h
  87.     db    0FFh,0FFh,0FFh,0FFh,001h,0C9h,0C9h,0C9h        ; 0B7h
  88.     db    0FFh,0FFh,007h,0E7h,007h,0E7h,0E7h,0E7h        ; 0B8h
  89.     db    0C9h,0C9h,009h,0F9h,009h,0C9h,0C9h,0C9h        ; 0B9h
  90.     db    0C9h,0C9h,0C9h,0C9h,0C9h,0C9h,0C9h,0C9h        ; 0BAh
  91.     db    0FFh,0FFh,001h,0F9h,009h,0C9h,0C9h,0C9h        ; 0BBh
  92.     db    0C9h,0C9h,009h,0F9h,001h,0FFh,0FFh,0FFh        ; 0BCh
  93.     db    0C9h,0C9h,0C9h,0C9h,001h,0FFh,0FFh,0FFh        ; 0BDh
  94.     db    0E7h,0E7h,007h,0E7h,007h,0FFh,0FFh,0FFh        ; 0BEh
  95.     db    0FFh,0FFh,0FFh,0FFh,007h,0E7h,0E7h,0E7h        ; 0BFh
  96.     db    0E7h,0E7h,0E7h,0E7h,0E0h,0FFh,0FFh,0FFh        ; 0C0h
  97.     db    0E7h,0E7h,0E7h,0E7h,000h,0FFh,0FFh,0FFh        ; 0C1h
  98.     db    0FFh,0FFh,0FFh,0FFh,000h,0E7h,0E7h,0E7h        ; 0C2h
  99.     db    0E7h,0E7h,0E7h,0E7h,0E0h,0E7h,0E7h,0E7h        ; 0C3h
  100.     db    0FFh,0FFh,0FFh,0FFh,000h,0FFh,0FFh,0FFh        ; 0C4h
  101.     db    0E7h,0E7h,0E7h,0E7h,000h,0E7h,0E7h,0E7h        ; 0C5h
  102.     db    0E7h,0E7h,0E0h,0E7h,0E0h,0E7h,0E7h,0E7h        ; 0C6h
  103.     db    0C9h,0C9h,0C9h,0C9h,0C8h,0C9h,0C9h,0C9h        ; 0C7h
  104.     db    0C9h,0C9h,0C8h,0CFh,0C0h,0FFh,0FFh,0FFh        ; 0C8h
  105.     db    0FFh,0FFh,0C0h,0CFh,0C8h,0C9h,0C9h,0C9h        ; 0C9h
  106.     db    0C9h,0C9h,008h,0FFh,000h,0FFh,0FFh,0FFh        ; 0CAh
  107.     db    0FFh,0FFh,000h,0FFh,008h,0C9h,0C9h,0C9h        ; 0CBh
  108.     db    0C9h,0C9h,0C8h,0CFh,0C8h,0C9h,0C9h,0C9h        ; 0CCh
  109.     db    0FFh,0FFh,000h,0FFh,000h,0FFh,0FFh,0FFh        ; 0CDh
  110.     db    0C9h,0C9h,008h,0FFh,008h,0C9h,0C9h,0C9h        ; 0CEh
  111.     db    0E7h,0E7h,000h,0FFh,000h,0FFh,0FFh,0FFh        ; 0CFh
  112.     db    0C9h,0C9h,0C9h,0C9h,000h,0FFh,0FFh,0FFh        ; 0D0h
  113.     db    0FFh,0FFh,000h,0FFh,000h,0E7h,0E7h,0E7h        ; 0D1h
  114.     db    0FFh,0FFh,0FFh,0FFh,000h,0C9h,0C9h,0C9h        ; 0D2h
  115.     db    0C9h,0C9h,0C9h,0C9h,0C0h,0FFh,0FFh,0FFh        ; 0D3h
  116.     db    0E7h,0E7h,0E0h,0E7h,0E0h,0FFh,0FFh,0FFh        ; 0D4h
  117.     db    0FFh,0FFh,0E0h,0E7h,0E0h,0E7h,0E7h,0E7h        ; 0D5h
  118.     db    0FFh,0FFh,0FFh,0FFh,0C0h,0C9h,0C9h,0C9h        ; 0D6h
  119.     db    0C9h,0C9h,0C9h,0C9h,000h,0C9h,0C9h,0C9h        ; 0D7h
  120.     db    0E7h,0E7h,000h,0E7h,000h,0E7h,0E7h,0E7h        ; 0D8h
  121.     db    0E7h,0E7h,0E7h,0E7h,007h,0FFh,0FFh,0FFh        ; 0D9h
  122.     db    0FFh,0FFh,0FFh,0FFh,0E0h,0E7h,0E7h,0E7h        ; 0DAh
  123.     db    000h,000h,000h,000h,000h,000h,000h,000h        ; 0DBh
  124.     db    0FFh,0FFh,0FFh,0FFh,000h,000h,000h,000h        ; 0DCh
  125.     db    00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh        ; 0DDh
  126.     db    0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h        ; 0DEh
  127.     db    000h,000h,000h,000h,0FFh,0FFh,0FFh,0FFh        ; 0DFh
  128.     db    0FFh,0FFh,0C4h,091h,09Bh,091h,0C4h,0FFh        ; 0E0h
  129.     db    0FFh,0C3h,099h,083h,099h,083h,09Fh,09Fh        ; 0E1h
  130.     db    0FFh,081h,099h,09Fh,09Fh,09Fh,09Fh,0FFh        ; 0E2h
  131.     db    0FFh,080h,0C9h,0C9h,0C9h,0C9h,0C9h,0FFh        ; 0E3h
  132.     db    081h,099h,0CFh,0E7h,0CFh,099h,081h,0FFh        ; 0E4h
  133.     db    0FFh,0FFh,0C0h,093h,093h,093h,0C7h,0FFh        ; 0E5h
  134.     db    0FFh,0CCh,0CCh,0CCh,0CCh,0C1h,0CFh,09Fh        ; 0E6h
  135.     db    0FFh,0C4h,091h,0F3h,0F3h,0F3h,0F3h,0FFh        ; 0E7h
  136.     db    081h,0E7h,0C3h,099h,099h,0C3h,0E7h,081h        ; 0E8h
  137.     db    0E3h,0C9h,09Ch,080h,09Ch,0C9h,0E3h,0FFh        ; 0E9h
  138.     db    0E3h,0C9h,09Ch,09Ch,0C9h,0C9h,088h,0FFh        ; 0EAh
  139.     db    0F1h,0E7h,0F3h,0C1h,099h,099h,0C3h,0FFh        ; 0EBh
  140.     db    0FFh,0FFh,081h,024h,024h,081h,0FFh,0FFh        ; 0ECh
  141.     db    0F9h,0F3h,081h,024h,024h,081h,09Fh,03Fh        ; 0EDh
  142.     db    0E3h,09Fh,03Fh,003h,03Fh,09Fh,0E3h,0FFh        ; 0EEh
  143.     db    0C3h,099h,099h,099h,099h,099h,099h,0FFh        ; 0EFh
  144.     db    0FFh,081h,0FFh,081h,0FFh,081h,0FFh,0FFh        ; 0F0h
  145.     db    0E7h,0E7h,081h,0E7h,0E7h,0FFh,081h,0FFh        ; 0F1h
  146.     db    0CFh,0E7h,0F3h,0E7h,0CFh,0FFh,081h,0FFh        ; 0F2h
  147.     db    0F3h,0E7h,0CFh,0E7h,0F3h,0FFh,081h,0FFh        ; 0F3h
  148.     db    0F1h,0E4h,0E4h,0E7h,0E7h,0E7h,0E7h,0E7h        ; 0F4h
  149.     db    0E7h,0E7h,0E7h,0E7h,0E7h,027h,027h,08Fh        ; 0F5h
  150.     db    0E7h,0E7h,0FFh,081h,0FFh,0E7h,0E7h,0FFh        ; 0F6h
  151.     db    0FFh,089h,023h,0FFh,089h,023h,0FFh,0FFh        ; 0F7h
  152.     db    0C7h,093h,093h,0C7h,0FFh,0FFh,0FFh,0FFh        ; 0F8h
  153.     db    0FFh,0FFh,0FFh,0E7h,0E7h,0FFh,0FFh,0FFh        ; 0F9h
  154.     db    0FFh,0FFh,0FFh,0FFh,0E7h,0FFh,0FFh,0FFh        ; 0FAh
  155.     db    0F0h,0F3h,0F3h,0F3h,013h,093h,0C3h,0E3h        ; 0FBh
  156.     db    087h,093h,093h,093h,093h,0FFh,0FFh,0FFh        ; 0FCh
  157.     db    08Fh,0E7h,0CFh,09Fh,087h,0FFh,0FFh,0FFh        ; 0FDh
  158.     db    0FFh,0FFh,0C3h,0C3h,0C3h,0C3h,0FFh,0FFh        ; 0FEh
  159.     db    0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh        ; 0FFh
  160.  
  161. label1:
  162.  
  163. ; exit if new table same as current table
  164.     mov    al,1Fh
  165.     mov    ah,35h            ; get interrupt 1Fh vector from DOS
  166.     int    21h
  167.     mov    di,bx            ; ES:DI -> current table
  168.  
  169.     mov    si,offset csdefs
  170.     push    cs
  171.     pop    ds            ; DS:SI -> our table
  172.  
  173.     mov    cx,label1-csdefs    ; size of table in bytes
  174.     repe    cmpsb
  175.     jne    label2            ; jump if our table contains new data
  176.  
  177.     mov    ax,4C00h
  178.     int    21h            ; exit to DOS
  179.  
  180. ; put CGA into All Points Addressible graphics mode so that DOS will use
  181. ; our character table
  182. label2:    mov    al,6            ; 640x200 2color APA graphics
  183.     mov    ah,0
  184.     int    10h
  185.  
  186. ; point CGA graphics character generator to our character definitions
  187.     mov    dx,offset csdefs
  188.     push    cs
  189.     pop    ds            ; DS:DX points to our table
  190.     mov    al,1Fh            ; interrupt number
  191.     mov    ah,25h            ; DOS function number
  192.     int    21h
  193.  
  194. ; leave table resident in RAM
  195.     mov    dx,offset label1
  196.     mov    cl,4
  197.     shr    dx,cl            ; DX := size of resident table
  198.     inc    dx            ;  in paragraphs
  199.     mov    ax,3100h
  200.     int    21h            ; terminate and remain resident
  201.  
  202. cseg    ends
  203.  
  204.     end    label0
  205.